VistaのタクススケジューラーとLow Priority I/O

マイクロソフト畠山です。
忙しさにかこつけて更新を怠っていました・・・

さて今日はVistaの新機能についてです。Low Priority I/O という機能の活用についてです。一言でいうなら、ディスクなどのI/Oアクセスについて優先順位をつけられる、ということです。バックグラウンドで動いていて、そんなにシビアな処理を要求しないものについては、自分の操作を優先して欲しいもので、これを指示できるようになった、ということで。

といっても、実際にそれを実現するための方法は、いろいろと探さねばなりませんでした。私の知る限り、タスクスケジューラーが一番簡単な実現方法です。

まずは確認方法から。

sysinternalのツールでprocess explorer というものがあります、これだと、各プロセスごとのIO優先度を閲覧することができます。まずは、これを入手しましょう。
単独のprocexp.exeがあるだけですが、Vistaなので管理者権限で起動させましょう。これじゃないと、全てが見えるわけではありません。私は常に管理者権限で起動させるプログラムでは、下の図のように、プログラムのプロパティの「管理者としてこのプログラムを実行する」にチェックを入れています。
exeのプロパティ
起動直後に、左側にプロセスツリー。右側に各プロセスの情報が閲覧できます。
I/O Priorityはデフォルトだと表示されませんので、列の部分を右クリックし、
「Select Colmuns」から「I/O Priority」を選択します。
I/O Priority
一覧に戻ってみましょう。どれくらいのものが、Lowもしくは、Very Lowに設定されているのでしょうか?

ななななーーんと、私のVista Ultimateの場合、ほとんどありません!Normalばっかし。唯一確認できたのは、Windows Desktop SearchのIndexerだけでした・・・ (余談ですが、という事は、他社のDesktop Searchに切り替えられるSP1が出たあと、このPriority設定によっては、邪魔される可能性もあるわけですよね・・・)
image

これではいかーーーん、ということで、全然バックグラウンドで動いてもらっても良い、Sidebar Gadgetの設定を変更してみます。

デフォルトだと、Sidebarは、スタートアップ で起動されます。その設定もありますね。
image
Process Explorerから、どんなコマンドライン文字列で起動されたか取得して、それをタスクスケジューラーの新規タスクへコピーします。これによって、同じ、ログイン時に起動されるのですが、I/O Priority Lowを実現できます!

Windowsサイドバーの「起動時にxxx」はチェックオフに当然します。

まずは、Process Explorerから、sidebar.exeを探します。ダブルクリックすると、その起動時のコマンドライン文字列が取得できます。
image
"C:Program FilesWindows Sidebarsidebar.exe /autoRun"

ですね。

さて、今度は、タスクスケジューラーで、ジョブを作成します。タスクスケジューラーを起動したら、右側の「操作」から (MMC3.0は、基本作業は右側です) 「タスクの作成」を選択します。
image

「全般」の 「名前」に識別子を。ここでは、「Windows サイドバー」とでもしておきましょう。
次に「トリガ」を新規作成し、「ログオン時」を選択します。
image
次に、操作で、先ほどのプログラム文字列を指定します。「" (ダブルクォートをお忘れなく)」引数は、「引数の追加」に。
image
あとは細かいところを適時設定して終わりです。

さ、ログオフして、ログオン後、process explorerからsidebar.exeのデータを確認してみましょう。
image 
いかがでしたでしょうか?

タスクスケジューラーの新たな活用方法が見えてきたのでは、と思います。勿論、全てのバックグラウンドのものをLowにすればよいわけではありません。SQL Serverは、データ保存を確実かつ迅速にするために、Highでも良いくらいです。
いろいろと試してみてください。
また、以前も書きましたが、このテクニックはWindows Server 2008 でも使える可能性が高いのです。製品出荷後、こちらでも是非試してみてください。
ご自分で動かしてみないと、ソフトウェアの良さは理解できません。

2007年11月6日
マイクロソフト株式会社
畠山 大有

コメントを残す